package model.trader.trade;

import java.util.List;

import model.market.MarketInformation;
import model.market.MarketManager;
import model.market.Position;
import model.market.Trade;
import model.trader.TradeInstruction;
import model.trader.Trader;

/**
 * A trade strategy converts the portfolio manager's instructions into real trades.
 * A trade strategy does not have to complete the trade, for instance a trader may think 
 * liquidity is not available for an instruction and will therefore trade a smaller amount this period.
 * If the portfolio manager still wants the stock tomorrow she'll ask for it again.
 * 
 * @author andy
 *
 */
public interface TradeExecutionStrategy {

	public java.util.List<Trade> trade(Trader trader,Position pos,
			TradeInstruction[] instructions,
			MarketManager market,
			MarketInformation marketInfo);
	
}
